import axios from 'axios'
import { useAuthStore } from '../store/auth'

// 表数组索引常量
const TABLES = {
  USERS: 0,
  ARTICLES: 1,
  PRODUCTS: 2,
  MOVIES: 3,
  COMMENTS: 4,
  CATEGORIES: 5,
  COURSES: 6,
  SUBITEMS: 7
};

const instance = axios.create({
  // 通过Vite代理到Node.js后端服务
  baseURL: '/api/demo',
});

instance.interceptors.request.use((config) => {
  const auth = useAuthStore();
  if (auth.token) {
    config.headers.Authorization = `Bearer ${auth.token}`;
  }
  return config;
});

// 模拟数据生成器
const generateMockData = (url, params) => {
  // 根据不同的接口返回不同的模拟数据
  if (url === '/getallitems') {
    // 可以根据userid参数来返回用户特定的数据
    const userId = params.userid || 'default';

    if (params.typeIndex === TABLES.CATEGORIES) {
      return {
        errno: 0,
        data: [
          { id: 1, title: '计算机科学', description: '学习编程、算法和数据结构' },
          { id: 2, title: '数学与统计', description: '掌握数学基础和统计分析方法' },
          { id: 3, title: '外语学习', description: '提高英语和其他外语能力' },
          { id: 4, title: '艺术设计', description: '学习设计原则和创意表达' }
        ]
      }
    } else if (params.typeIndex === TABLES.COURSES) {
      return {
        errno: 0,
        data: [
          {
            id: 1,
            title: 'JavaScript 高级编程',
            categoryId: 1,
            body: '深入学习JavaScript的高级特性和最佳实践', // 新字段
            teachername: '张教授', // 新字段
            description: '深入学习JavaScript的高级特性和最佳实践', // 向后兼容
            teacher: '张教授', // 向后兼容
            startTime: '2023-09-01',
            endTime: '2023-12-31', // 新增结束时间
            picPaths: null, // 新增图片路径
            userid: params.userid || 1 // 使用传递的用户ID
            // addedTime 由数据库自动生成，不在模拟数据中
          },
          {
            id: 2,
            title: '数据结构与算法',
            categoryId: 1,
            body: '掌握计算机科学的核心数据结构和算法',
            teachername: '李讲师',
            description: '掌握计算机科学的核心数据结构和算法',
            teacher: '李讲师',
            startTime: '2023-09-05',
            endTime: '2023-12-31',
            picPaths: null,
            userid: params.userid || 1
            // addedTime 由数据库自动生成，不在模拟数据中
          },
          {
            id: 3,
            title: '概率论与数理统计',
            categoryId: 2,
            body: '学习概率论的基本原理和统计分析方法',
            teachername: '王教授',
            description: '学习概率论的基本原理和统计分析方法',
            teacher: '王教授',
            startTime: '2023-09-10',
            endTime: '2023-12-31',
            picPaths: null,
            userid: params.userid || 1
            // addedTime 由数据库自动生成，不在模拟数据中
          },
          {
            id: 4,
            title: '英语口语进阶',
            categoryId: 3,
            body: '提高英语口语表达能力和听力理解',
            teachername: 'Smith老师',
            description: '提高英语口语表达能力和听力理解',
            teacher: 'Smith老师',
            startTime: '2023-09-15',
            endTime: '2023-12-31',
            picPaths: null,
            userid: params.userid || 1
            // addedTime 由数据库自动生成，不在模拟数据中
          },
          {
            id: 5,
            title: 'UI设计基础',
            categoryId: 4,
            body: '学习用户界面设计的基本原则和技巧',
            teachername: '陈设计师',
            description: '学习用户界面设计的基本原则和技巧',
            teacher: '陈设计师',
            startTime: '2023-09-20',
            endTime: '2023-12-31',
            picPaths: null,
            userid: params.userid || 1
            // addedTime 由数据库自动生成，不在模拟数据中
          },
          {
            id: 6,
            title: 'Python数据分析',
            categoryId: 1,
            body: '使用Python进行数据处理和可视化',
            teachername: '赵工程师',
            description: '使用Python进行数据处理和可视化',
            teacher: '赵工程师',
            startTime: '2023-09-25',
            endTime: '2023-12-31',
            picPaths: null,
            userid: params.userid || 1
            // addedTime 由数据库自动生成，不在模拟数据中
          }
        ]
      }
    } else if (params.typeIndex === TABLES.SUBITEMS) {
      const allTasks = [
        { id: 1, title: 'JavaScript 练习', courseId: 1, content: '完成10道JavaScript高级编程习题', startTime: '2023-09-01', endTime: '2023-09-07', deadline: '2023-09-07T23:59:59', status: '未完成' },
        { id: 2, title: '算法实现', courseId: 2, content: '实现二分查找和快速排序算法', startTime: '2023-09-05', endTime: '2023-09-12', deadline: '2023-09-12T23:59:59', status: '未完成' },
        { id: 3, title: '统计分析报告', courseId: 3, content: '使用统计方法分析一组数据并撰写报告', startTime: '2023-09-10', endTime: '2023-09-17', deadline: '2023-09-17T23:59:59', status: '未完成' },
        { id: 4, title: '口语练习', courseId: 4, content: '完成10个日常场景对话练习', startTime: '2023-09-15', endTime: '2023-09-22', deadline: '2023-09-22T23:59:59', status: '未完成' },
        { id: 5, title: 'UI设计作业', courseId: 5, content: '设计一个手机应用界面原型', startTime: '2023-09-20', endTime: '2023-09-27', deadline: '2023-09-27T23:59:59', status: '未完成' },
        { id: 6, title: '数据可视化项目', courseId: 6, content: '使用Python创建3个数据可视化图表', startTime: '2023-09-25', endTime: '2023-10-02', deadline: '2023-10-02T23:59:59', status: '未完成' },
        { id: 7, title: '闭包与原型链', courseId: 1, content: '深入理解JavaScript闭包和原型链概念', startTime: '2023-09-08', endTime: '2023-09-15', deadline: '2023-09-15T23:59:59', status: '未完成' },
        { id: 8, title: '排序算法比较', courseId: 2, content: '实现并比较5种常见排序算法的性能', startTime: '2023-09-12', endTime: '2023-09-19', deadline: '2023-09-19T23:59:59', status: '未完成' }
      ]

      // 根据courseId过滤任务
      if (params.courseId) {
        return {
          errno: 0,
          data: allTasks.filter(task => task.courseId === parseInt(params.courseId))
        }
      }

      return {
        errno: 0,
        data: allTasks
      }
    } else if (params.typeIndex === TABLES.COMMENTS) {
      const allComments = [
        { id: 1, articleid: 1, userName: '23002943', body: '张教授的课讲解非常清晰，案例丰富，很容易理解复杂的JavaScript概念。', userid: 23002943, addedTime: '2023-09-02T14:30:00' },
        { id: 2, articleid: 1, userName: '20231002', body: '课程内容很充实，作业设计合理，能够很好地巩固所学知识。', userid: 20231002, addedTime: '2023-09-03T10:15:00' },
        { id: 3, articleid: 2, userName: '19980512', body: '李讲师的算法课深入浅出，即使是复杂的算法也能讲得很明白。', userid: 19980512, addedTime: '2023-09-06T16:45:00' },
        { id: 4, articleid: 3, userName: '20210901', body: '王教授的概率论讲得很系统，帮助我建立了完整的知识体系。', userid: 20210901, addedTime: '2023-09-11T09:30:00' },
        { id: 5, articleid: 4, userName: '20201215', body: 'Smith老师的口语课很有趣，练习机会很多，进步明显。', userid: 20201215, addedTime: '2023-09-16T14:20:00' },
        { id: 6, articleid: 5, userName: '20220620', body: '陈设计师的UI课实用性很强，学到了很多行业内的设计技巧。', userid: 20220620, addedTime: '2023-09-21T11:10:00' },
        { id: 7, articleid: 6, userName: '20230312', body: '赵工程师的Python数据分析课程案例丰富，非常实用。', userid: 20230312, addedTime: '2023-09-26T15:40:00' },
        { id: 8, articleid: 2, userName: '20210325', body: '数据结构的作业很有挑战性，但是完成后收获很大。', userid: 20210325, addedTime: '2023-09-07T13:50:00' }
      ]

      // 根据articleid过滤评论
      if (params.articleid) {
        return {
          errno: 0,
          data: allComments.filter(comment => comment.articleid === parseInt(params.articleid))
        }
      }

      return {
        errno: 0,
        data: allComments
      }
    }
  } else if (url === '/getsingle') {
    if (params.typeIndex === TABLES.COURSES) {
      // 课程详情数据
      const courses = [
        {
          id: 1,
          title: 'JavaScript 高级编程',
          description: '本课程将深入讲解JavaScript的高级特性，包括闭包、原型链、异步编程、ES6+新特性等。通过实际案例和项目练习，帮助学生掌握现代JavaScript开发的核心技能和最佳实践。课程适合有一定JavaScript基础的开发者学习。',
          teacher: '张教授',
          startTime: '2023-09-01T09:00:00',
          category: '计算机科学'
        },
        {
          id: 2,
          title: '数据结构与算法',
          description: '本课程系统讲解计算机科学中核心的数据结构和算法，包括链表、栈、队列、树、图等数据结构，以及排序、查找、动态规划等算法。通过大量的实例和练习，培养学生解决复杂问题的能力和算法思维。',
          teacher: '李讲师',
          startTime: '2023-09-05T14:00:00',
          category: '计算机科学'
        },
        {
          id: 3,
          title: '概率论与数理统计',
          description: '本课程介绍概率论的基本原理和数理统计方法，包括概率分布、随机变量、参数估计、假设检验等内容。通过实际案例分析，培养学生运用统计方法解决实际问题的能力。',
          teacher: '王教授',
          startTime: '2023-09-10T10:00:00',
          category: '数学与统计'
        },
        {
          id: 4,
          title: '英语口语进阶',
          description: '本课程针对有一定英语基础的学习者，通过情景对话、角色扮演、听力训练等多种方式，提高英语口语表达能力和听力理解能力。课程注重实用交流能力的培养，涵盖日常生活、商务沟通等多个场景。',
          teacher: 'Smith老师',
          startTime: '2023-09-15T16:00:00',
          category: '外语学习'
        },
        {
          id: 5,
          title: 'UI设计基础',
          description: '本课程介绍用户界面设计的基本原则和方法，包括色彩搭配、排版设计、交互设计等内容。通过实际项目实践，培养学生的设计思维和界面设计能力，掌握主流设计工具的使用技巧。',
          teacher: '陈设计师',
          startTime: '2023-09-20T13:00:00',
          category: '艺术设计'
        },
        {
          id: 6,
          title: 'Python数据分析',
          description: '本课程介绍使用Python进行数据处理和分析的方法，包括NumPy、Pandas等数据分析库的使用，以及数据可视化技术。通过实际数据集的分析案例，让学生从数据中获取 insights 的能力。',
          teacher: '赵工程师',
          startTime: '2023-09-25T11:00:00',
          category: '计算机科学'
        }
      ]
      
      // 根据id查找课程
      const id = params.id || 1
      const course = courses.find(c => c.id === parseInt(id))
      
      return {
        errno: 0,
        data: course || courses[0] // 如果没找到，返回第一个课程
      }
    }
  } else if (url === '/login' || url === '/reg') {
    return {
      errno: 0,
      data: { id: Date.now() },
      message: '操作成功'
    }
  } else if (url === '/additem') {
    // 确保添加项目时返回包含用户ID的数据
    // 对于课程数据，使用新的字段结构
    if (params.typeIndex === TABLES.COURSES) {
      return {
        errno: 0,
        data: {
          id: Date.now(),
          title: params.title,
          body: params.body,              // 对应数据库字段
          teachername: params.teachername, // 对应数据库字段
          startTime: params.startTime,
          endTime: params.endTime,        // 新增结束时间
          picPaths: params.picPaths,      // 新增课程图片
          userid: params.userid,          // 对应数据库字段
          // addedTime 由数据库自动生成，不在返回数据中
          // categoryId 不在数据库表结构中，不返回
          // 向后兼容字段
          description: params.body,
          teacher: params.teachername,
          createTime: new Date().toISOString()  // 使用当前时间作为创建时间
        },
        message: '操作成功'
      }
    }

    // 其他类型的项目保持原有结构
    // 评价数据特殊处理 - 接收body、userid和articleid参数
    if (params.typeIndex === TABLES.COMMENTS) {
      return {
        errno: 0,
        data: {
          id: Date.now(),
          body: params.body,          // 评价内容
          userid: params.userid,      // 评价者ID
          articleid: params.articleid, // 文章ID（课程ID）
          addedTime: new Date().toISOString()
        },
        message: '评价发表成功'
      }
    }

    // 其他类型保持原有结构
    return {
      errno: 0,
      data: {
        id: Date.now(),
        ...params,
        createTime: new Date().toISOString()
      },
      message: '操作成功'
    }
  }
  
  // 默认返回空数据
  return { errno: 0, data: [] }
};

// 带模拟数据支持的helper wrappers
const get = async (url, params) => {
  try {
    const response = await instance.get(url, { params });
    return response;
  } catch (error) {
    console.log('API GET请求失败，返回模拟数据:', url, params);
    // 返回模拟数据，格式与真实API响应一致
    return { data: generateMockData(url, params) };
  }
};

const post = async (url, data) => {
  try {
    const response = await instance.post(url, data);
    return response;
  } catch (error) {
    console.log('API POST请求失败，返回模拟数据:', url, data);
    // 返回模拟数据，格式与真实API响应一致
    return { data: generateMockData(url, data) };
  }
};

export default {
  get,
  post,
  // 用户相关接口
  login: (username, pwd) => post('/login', { username, pwd }),
  register: (userData) => post('/reg', userData),
  
  // 课程类别相关接口
  getCategories: () => get('/getallitems', { typeIndex: TABLES.CATEGORIES, userid: useAuthStore().userId }),
  addCategory: (category) => post('/additem', { ...category, typeIndex: TABLES.CATEGORIES }),

  // 课程相关接口
  getCourses: () => get('/getallitems', { typeIndex: TABLES.COURSES, userid: useAuthStore().userId }),
  getCourse: (id) => get('/getsingle', { id, typeIndex: TABLES.COURSES }),
  addCourse: (course) => post('/additem', { ...course, typeIndex: TABLES.COURSES }),

  // 课程任务相关接口
  getCourseTasks: () => get('/getallitems', { typeIndex: TABLES.SUBITEMS, userid: useAuthStore().userId }),
  // 修改getTasksByCourseId函数，移除userid参数依赖
  getTasksByCourseId: (courseId) => get('/getallitems', { typeIndex: TABLES.SUBITEMS, courseId }),
  addTask: (task) => post('/additem', { ...task, typeIndex: TABLES.SUBITEMS }),

  // 评价相关接口
  getComments: () => get('/getallitems', { typeIndex: TABLES.COMMENTS, userid: useAuthStore().userId }),
  getCommentsByCourseId: (articleid) => get('/getallitems', { typeIndex: TABLES.COMMENTS, userid: useAuthStore().userId }),
  addComment: (comment) => post('/additem', { ...comment, typeIndex: TABLES.COMMENTS }),
  
  // 更新任务状态
  updateTaskStatus: (taskId, status) => post('/updateitem', {
    id: taskId,
    status: status,
    typeIndex: TABLES.SUBITEMS
  })
};